#include"TcpServer.hpp"
#include"ServerCal.hpp"

static void Usage(std::string proc)
{
    std::cout << "\n\tUsage: " << proc << "port[1024/]\n\n";
}

// ./tcpserver port
int main(int argc,char* argv[])
{
    std::string proc=argv[0];
    if(argc!=2)
    {
        Usage(proc);
        exit(0);
    }
    
    uint16_t port=std::stoi(argv[1]);

    //计算器
    ServerCal cal;

    //服务器
    TcpServer server(port,std::bind(&ServerCal::Calculator,&cal,std::placeholders::_1));
   
    // std::bind(&ServerCal::Calculator, &cal, std::placeholders::_1)：其实就是回调函数

    //因为Calculator函数是非静态类函数，所以就要展示出它的所有参数，
    //不可以是 TcpServer *tsvp = new TcpServer(port, Cal::Calculator);  类对象和类函数要分离


    //Calculator：类的函数
    //cal：指定类对象（&cal=*this)
    //std::placeholders::_1)：Calculator还有一个参数，因为std::string Calculator(std::string &package)

    //如果Calculator没有参数，即std::string Calculator()。就改成 std::bind(&ServerCal::Calculator, &cal)

    // Daemon();
    //daemon(0, 0);   //将当前进程转换为守护进程（daemon）
    std::cout<<"------------------------\n";
    server.Start();

    return 0;
}